/**
 * 数据网关前端类型定义
 * 
 * 定义了前端应用中使用的所有TypeScript类型和接口
 */

// ============================================================================
// 基础类型定义
// ============================================================================

/** API响应基础结构 */
export interface ApiResponse<T = any> {
  /** 是否成功 */
  success: boolean;
  /** 响应数据 */
  data?: T;
  /** 错误消息 */
  message?: string;
  /** 错误代码 */
  code?: string;
  /** 时间戳 */
  timestamp: string;
}

/** 分页参数 */
export interface PaginationParams {
  /** 页码，从1开始 */
  page: number;
  /** 每页大小 */
  pageSize: number;
  /** 排序字段 */
  sortBy?: string;
  /** 排序方向 */
  sortOrder?: 'asc' | 'desc';
}

/** 分页响应 */
export interface PaginatedResponse<T> {
  /** 数据列表 */
  items: T[];
  /** 总数量 */
  total: number;
  /** 当前页码 */
  page: number;
  /** 每页大小 */
  pageSize: number;
  /** 总页数 */
  totalPages: number;
}

// ============================================================================
// 数据源相关类型
// ============================================================================

/** 数据源类型 */
export type DataSourceType = 
  | 'mysql' 
  | 'postgresql' 
  | 'mongodb' 
  | 'redis' 
  | 'elasticsearch' 
  | 's3' 
  | 'parquet' 
  | 'csv' 
  | 'json';

/** 数据源状态 */
export type DataSourceStatus = 'connected' | 'disconnected' | 'error' | 'testing';

/** 数据源配置 */
export interface DataSourceConfig {
  /** 数据源ID */
  id: string;
  /** 数据源名称 */
  name: string;
  /** 数据源类型 */
  type: DataSourceType;
  /** 连接配置 */
  config: Record<string, any>;
  /** 描述 */
  description?: string;
  /** 标签 */
  tags?: string[];
  /** 创建时间 */
  createdAt: string;
  /** 更新时间 */
  updatedAt: string;
  /** 状态 */
  status: DataSourceStatus;
  /** 最后测试时间 */
  lastTestedAt?: string;
}

/** 数据源连接测试结果 */
export interface ConnectionTestResult {
  /** 是否成功 */
  success: boolean;
  /** 响应时间（毫秒） */
  responseTime: number;
  /** 错误消息 */
  error?: string;
  /** 连接信息 */
  info?: {
    /** 版本信息 */
    version?: string;
    /** 数据库名称 */
    database?: string;
    /** 用户名 */
    username?: string;
  };
}

/** 数据源Schema信息 */
export interface SchemaInfo {
  /** 表列表 */
  tables: TableInfo[];
  /** 视图列表 */
  views?: ViewInfo[];
  /** 索引列表 */
  indexes?: IndexInfo[];
}

/** 表信息 */
export interface TableInfo {
  /** 表名 */
  name: string;
  /** 表类型 */
  type: 'table' | 'view';
  /** 列信息 */
  columns: ColumnInfo[];
  /** 行数估计 */
  estimatedRows?: number;
  /** 表大小 */
  size?: string;
  /** 注释 */
  comment?: string;
}

/** 列信息 */
export interface ColumnInfo {
  /** 列名 */
  name: string;
  /** 数据类型 */
  dataType: string;
  /** 是否可为空 */
  nullable: boolean;
  /** 是否主键 */
  isPrimaryKey: boolean;
  /** 默认值 */
  defaultValue?: string;
  /** 注释 */
  comment?: string;
}

/** 视图信息 */
export interface ViewInfo {
  /** 视图名 */
  name: string;
  /** 定义SQL */
  definition: string;
  /** 列信息 */
  columns: ColumnInfo[];
}

/** 索引信息 */
export interface IndexInfo {
  /** 索引名 */
  name: string;
  /** 表名 */
  tableName: string;
  /** 列名列表 */
  columns: string[];
  /** 是否唯一 */
  isUnique: boolean;
  /** 索引类型 */
  type: string;
}

// ============================================================================
// API相关类型
// ============================================================================

/** API状态 */
export type ApiStatus = 'draft' | 'published' | 'deprecated' | 'disabled';

/** HTTP方法 */
export type HttpMethod = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';

/** API定义 */
export interface ApiDefinition {
  /** API ID */
  id: string;
  /** API名称 */
  name: string;
  /** API路径 */
  path: string;
  /** HTTP方法 */
  method: HttpMethod;
  /** 描述 */
  description?: string;
  /** 数据源ID */
  dataSourceId: string;
  /** SQL查询 */
  query: string;
  /** 参数定义 */
  parameters: ApiParameter[];
  /** 响应示例 */
  responseExample?: any;
  /** 状态 */
  status: ApiStatus;
  /** 版本 */
  version: string;
  /** 标签 */
  tags?: string[];
  /** 创建者 */
  createdBy: string;
  /** 创建时间 */
  createdAt: string;
  /** 更新时间 */
  updatedAt: string;
  /** 缓存配置 */
  cacheConfig?: CacheConfig;
  /** 限流配置 */
  rateLimitConfig?: RateLimitConfig;
}

/** API参数 */
export interface ApiParameter {
  /** 参数名 */
  name: string;
  /** 参数类型 */
  type: 'string' | 'number' | 'boolean' | 'array' | 'object';
  /** 是否必需 */
  required: boolean;
  /** 默认值 */
  defaultValue?: any;
  /** 描述 */
  description?: string;
  /** 验证规则 */
  validation?: {
    /** 最小值/长度 */
    min?: number;
    /** 最大值/长度 */
    max?: number;
    /** 正则表达式 */
    pattern?: string;
    /** 枚举值 */
    enum?: any[];
  };
}

/** 缓存配置 */
export interface CacheConfig {
  /** 是否启用缓存 */
  enabled: boolean;
  /** 缓存时间（秒） */
  ttl: number;
  /** 缓存键模式 */
  keyPattern?: string;
  /** 缓存标签 */
  tags?: string[];
}

/** 限流配置 */
export interface RateLimitConfig {
  /** 是否启用限流 */
  enabled: boolean;
  /** 请求数限制 */
  requests: number;
  /** 时间窗口（秒） */
  window: number;
  /** 限流策略 */
  strategy: 'fixed' | 'sliding';
}

// ============================================================================
// 监控相关类型
// ============================================================================

/** 指标类型 */
export type MetricType = 'counter' | 'gauge' | 'histogram' | 'summary';

/** 指标数据 */
export interface MetricData {
  /** 指标名称 */
  name: string;
  /** 指标类型 */
  type: MetricType;
  /** 指标值 */
  value: number;
  /** 标签 */
  labels: Record<string, string>;
  /** 时间戳 */
  timestamp: number;
  /** 帮助信息 */
  help?: string;
}

/** 健康检查状态 */
export type HealthStatus = 'healthy' | 'degraded' | 'unhealthy';

/** 组件健康信息 */
export interface ComponentHealth {
  /** 组件名称 */
  name: string;
  /** 健康状态 */
  status: HealthStatus;
  /** 状态消息 */
  message?: string;
  /** 检查时间 */
  timestamp: number;
  /** 响应时间（毫秒） */
  responseTime?: number;
  /** 详细信息 */
  details?: Record<string, any>;
}

/** 系统指标 */
export interface SystemMetrics {
  /** CPU使用率 */
  cpuUsage: number;
  /** 内存使用率 */
  memoryUsage: number;
  /** 磁盘使用率 */
  diskUsage: number;
  /** 网络IO */
  networkIO: {
    /** 接收字节数 */
    rxBytes: number;
    /** 发送字节数 */
    txBytes: number;
  };
  /** 活跃连接数 */
  activeConnections: number;
  /** 时间戳 */
  timestamp: number;
}

// ============================================================================
// 插件相关类型
// ============================================================================

/** 插件状态 */
export type PluginStatus = 'installed' | 'enabled' | 'disabled' | 'error';

/** 插件信息 */
export interface PluginInfo {
  /** 插件ID */
  id: string;
  /** 插件名称 */
  name: string;
  /** 版本 */
  version: string;
  /** 描述 */
  description: string;
  /** 作者 */
  author: string;
  /** 状态 */
  status: PluginStatus;
  /** 配置Schema */
  configSchema?: any;
  /** 当前配置 */
  config?: Record<string, any>;
  /** 安装时间 */
  installedAt?: string;
  /** 更新时间 */
  updatedAt?: string;
  /** 依赖项 */
  dependencies?: string[];
}

// ============================================================================
// 用户和权限相关类型
// ============================================================================

/** 用户角色 */
export type UserRole = 'admin' | 'developer' | 'viewer';

/** 用户信息 */
export interface UserInfo {
  /** 用户ID */
  id: string;
  /** 用户名 */
  username: string;
  /** 邮箱 */
  email: string;
  /** 显示名称 */
  displayName: string;
  /** 角色 */
  role: UserRole;
  /** 头像URL */
  avatar?: string;
  /** 创建时间 */
  createdAt: string;
  /** 最后登录时间 */
  lastLoginAt?: string;
}

/** 权限 */
export interface Permission {
  /** 权限ID */
  id: string;
  /** 权限名称 */
  name: string;
  /** 资源类型 */
  resource: string;
  /** 操作类型 */
  action: string;
  /** 描述 */
  description?: string;
}

// ============================================================================
// UI状态相关类型
// ============================================================================

/** 加载状态 */
export interface LoadingState {
  /** 是否加载中 */
  loading: boolean;
  /** 错误信息 */
  error?: string;
}

/** 通知类型 */
export type NotificationType = 'success' | 'error' | 'warning' | 'info';

/** 通知消息 */
export interface Notification {
  /** 通知ID */
  id: string;
  /** 通知类型 */
  type: NotificationType;
  /** 标题 */
  title: string;
  /** 消息内容 */
  message: string;
  /** 是否自动关闭 */
  autoClose?: boolean;
  /** 自动关闭延迟（毫秒） */
  duration?: number;
  /** 创建时间 */
  createdAt: number;
}

/** 主题模式 */
export type ThemeMode = 'light' | 'dark' | 'system';

/** 应用设置 */
export interface AppSettings {
  /** 主题模式 */
  theme: ThemeMode;
  /** 语言 */
  language: string;
  /** 侧边栏是否折叠 */
  sidebarCollapsed: boolean;
  /** 自动刷新间隔（秒） */
  autoRefreshInterval: number;
  /** 是否显示调试信息 */
  showDebugInfo: boolean;
}
